/*
 * MySharePtr.h
 *
 *  Created on: 2020年12月15日
 *      Author: san
 */

#ifndef TEMPLATES_HEADER_MYSHAREPTR_H_
#define TEMPLATES_HEADER_MYSHAREPTR_H_

#include <functional>

namespace san {

// TODO

template <typename T>
class MySharePtr {
public:
	// 构造函数和析构函数
	MySharePtr<T>();
	// 添加删除元素

	// swap

	// 获取一些信息

	// reset


private:
	T *ptr;
	std::size_t *ref_count;
	std::function<void(T*)> deleter;
	auto decrement_and_destroy();
};

template<typename T>
auto swap(MySharePtr<T>& lhs, MySharePtr<T>& rhs)
{
	using std::swap;
	swap(lhs.ptr, rhs.ptr);
	swap(lhs.ref_count, rhs.ref_count);
	swap(lhs.deleter, rhs.deleter);
}


} /* namespace san /




#endif /* TEMPLATES_HEADER_MYSHAREPTR_H_ */
